home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / forth / pfe-0.000 / pfe-0 / pfe-0.9.13 / demo / 6809sim / bin2dec.asm < prev    next >
Encoding:
Assembly Source File  |  1994-06-19  |  2.0 KB  |  105 lines

  1. \  Example program for 6809 simulator. 
  2. \  Convert 32-bits binary number to decimal.
  3.  
  4. assemble
  5.         $100 org
  6.         jmp -1    
  7.  
  8. \ Example numbers for conversion
  9. label num1     -1 , -1 ,       \ should be 4294967295
  10. label num2     0 , 0 ,         \ should be 0000000000
  11. label num3      32768 , 0 ,    \ should be 2147483648
  12. label num4    $3b9a , $c9ff , \ should be 0999999999
  13. label num5      $3b9a , $ca00 , \ should be 1000000000
  14. label num6    0 , 5501 ,    \ should be 0000005501
  15.  
  16.  
  17.  
  18. label bcdbuf     5 allot
  19. label temp     1 allot
  20. label temp2      1 allot
  21.  
  22. \ Convert 4-byte number pointed to by X to 5-byte (10 digit) bcd.
  23. label bin2bcd 
  24.         ldu # bcdbuf
  25.     ldb # 5
  26.         begin 
  27.          clr ,u+        \ Clear the 5-byte bcd buffer.
  28.      decb
  29.     0= until
  30.         ldb # 4        \ traverse 4 bytes of bin number 
  31.     stb temp
  32.         begin 
  33.      ldb # 8        \ and 8 bits of each byte. (msb to lsb)
  34.      stb temp2
  35.          begin
  36.        rol 0 ,x        \ Extract next bit from binary number.
  37.       ldb # 5
  38.           ldu # bcdbuf 5 +
  39.           begin
  40.        lda ,-u    \ multiply bcd number by 2 and add extracted bit
  41.        adca 0 ,u    \ into it. 
  42.         daa
  43.        sta 0 ,u
  44.        decb
  45.       0= until
  46.       dec temp2
  47.      0= until
  48.      leax 1 ,x
  49.      dec temp
  50.     0= until
  51.     rts
  52.  
  53. \ Output character B 
  54. label outch    
  55.         swi2
  56.     rts
  57.  
  58. \ Print double number (including leading zeros)  pointed to by X. 
  59. \ Number at that location is destroyed by the process.
  60. label prtdec    
  61.     jsr bin2bcd    \ Convert to bcd
  62.         ldx # bcdbuf    \ Traverse 5-byte buffer.
  63.     ldb # 5
  64.     stb temp
  65.         begin 
  66.      lda ,x+            
  67.          tfr a, b        
  68.      lsrb
  69.      lsrb
  70.      lsrb
  71.      lsrb         \ Extract higher digit from bcd byte.
  72.       addb # char 0
  73.      jsr outch
  74.      tfr a, b
  75.      andb # 15    \ Extract lower digit.
  76.      addb # char 0
  77.      jsr outch
  78.      dec temp
  79.     0= until
  80.     ldb # 13        \ output newline.
  81.     jsr outch
  82.     ldb # 10
  83.     jsr outch
  84.     rts
  85.  
  86. label main    
  87.         lds # $1ff
  88.     ldx # num1
  89.     jsr prtdec
  90.     ldx # num2
  91.     jsr prtdec
  92.     ldx # num3
  93.     jsr prtdec
  94.     ldx # num4
  95.     jsr prtdec
  96.     ldx # num5
  97.     jsr prtdec
  98.     ldx # num6
  99.     jsr prtdec
  100.     sync
  101.  
  102. main $100 1+ V! \ patch jump address at file start.
  103.  
  104. endasm
  105.